๊ธ๋ก๋ฒ ๊ฐ๋ฐ์๋ฅผ ์ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ํตํด React Fiber์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ํ๊ตฌํ๊ณ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ ํ์์ ๋ง์คํฐํ์ธ์.
React Fiber ํธ๋ฆฌ ํ์: ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ ์ํ์ ๋ํ ๊ธ๋ก๋ฒ ์ฌ์ธต ๋ถ์
๋์์์ด ์งํํ๋ ํ๋ฐํธ์๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ํ๋ ์์ํฌ์ ํต์ฌ ๋ฉ์ปค๋์ฆ์ ์ดํดํ๋ ๊ฒ์ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ ์ธ์ ํจ๋ฌ๋ค์์ ๊ฐ์ง React๋ ๋ง์ ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ํต์ฌ ๊ธฐ๋ฐ์ด ๋์์ต๋๋ค. React ์ํคํ ์ฒ์ ์ค์ํ ๋ฐ์ ์ ์ฌ์กฐ์ (reconciliation) ์๊ณ ๋ฆฌ์ฆ์ ์์ ํ ์ฌ์์ฑํ React Fiber์ ๋์ ์ด์์ต๋๋ค. ๋์ ๋ ๋๋ง๊ณผ ๊ฐ์ ์ฑ๋ฅ ๋ฐ ์๋ก์ด ๊ธฐ๋ฅ ์ธก๋ฉด์์์ ์ด์ ์ ๋๋ฆฌ ๋ ผ์๋์ง๋ง, React Fiber๊ฐ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ํํํ๊ณ ์ํํ๋์ง์ ๋ํ ๊น์ด ์๋ ์ดํด๋ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ์ค์ํ๋ฉด์๋ ๋๋ก๋ ๋ณต์กํ ์ฃผ์ ๋ก ๋จ์ ์์ต๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ React Fiber์ ๋ด๋ถ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ํ๊ณ , ๋ค์ํ ๋ฐฐ๊ฒฝ๊ณผ ๊ธฐ์ ์ ๋ฌธ์ฑ์ ๊ฐ์ง ๊ตญ์ ์ฒญ์ค์ ๋์์ผ๋ก ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ ํ์์ ๋ํ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
์งํ์ ์ดํด: ์คํ์์ Fiber๋ก
Fiber์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ ์ ์ React์ ์ด์ ์ํคํ ์ฒ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๊ธฐ React๋ ํธ์ถ ์คํ์ผ๋ก ๊ด๋ฆฌ๋๋ ์ฌ๊ท์ ์ฌ์กฐ์ (reconciliation) ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ฉด React๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ํํ๋ฉฐ, ์๋ก์ด ๊ฐ์ DOM์ ์ด์ ๊ฐ์ DOM๊ณผ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ณํ๊ณ ์ค์ DOM์ ์ ๋ฐ์ดํธํ์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ ์ ์ผ๋ก๋ ๊ฐ๋จํ์ง๋ง, ํนํ ํฌ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํ๊ณ๊ฐ ์์์ต๋๋ค. ์ฌ๊ท์ ๋๊ธฐ์ ํน์ฑ ๋๋ฌธ์ ๋จ์ผ ์ ๋ฐ์ดํธ๊ฐ ์ฃผ ์ค๋ ๋๋ฅผ ์ฅ์๊ฐ ์ฐจ๋จํ์ฌ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์๋ตํ์ง ์๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ, ์ด๋ ๋ชจ๋ ์ง์ญ์ ์ฌ์ฉ์์๊ฒ ๋ต๋ตํ ๊ฒฝํ์ ์ฃผ์์ต๋๋ค.
React Fiber๋ ์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ด๋ ๋จ์ํ ์ต์ ํ๊ฐ ์๋๋ผ React๊ฐ ์์ ์ ์ํํ๋ ๋ฐฉ์์ ๋ํ ๊ทผ๋ณธ์ ์ธ ์ฌ๊ตฌ์์ ๋๋ค. Fiber์ ํต์ฌ ์์ด๋์ด๋ ์ฌ์กฐ์ ์์ ์ ๋ ์๊ณ ์ค๋จ ๊ฐ๋ฅํ ๋จ์๋ก ๋ถํ ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ์๋ก์ด ๋ด๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ธ Fiber ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ํํํจ์ผ๋ก์จ ๋ฌ์ฑ๋ฉ๋๋ค.
Fiber ๋ ธ๋: React์ ๋ด๋ถ ํต์ฌ ์์
React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ์ปดํฌ๋ํธ๋ ๊ด๋ จ ์ํ, props ๋ฐ ํจ๊ณผ์ ํจ๊ป Fiber ๋ ธ๋๋ก ํํ๋ฉ๋๋ค. ์ด Fiber ๋ ธ๋๋ฅผ React UI์ ๋ด๋ถ ํํ์ ๊ตฌ์ฑํ๋ ๋น๋ฉ ๋ธ๋ก์ด๋ผ๊ณ ์๊ฐํ์ธ์. ๊ณผ๊ฑฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ์ DOM ๋ ธ๋์ ๋ฌ๋ฆฌ, Fiber ๋ ธ๋๋ React ์๋์ ํ์์ ์ธ ํ๋ถํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ฐ๋ณ์ ์ธ JavaScript ๊ฐ์ฒด์ ๋๋ค. ์ด๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ํ์ฑํ์ฌ Fiber ํธ๋ฆฌ๋ฅผ ๋ง๋๋๋ฐ, ์ด๋ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ์ง๋ง ํจ์จ์ ์ธ ์ํ ๋ฐ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ ์ถ๊ฐ ํฌ์ธํฐ๋ฅผ ํฌํจํฉ๋๋ค.
Fiber ๋ ธ๋์ ์ฃผ์ ์์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
type: ์์์ ํ์ (์: 'div', 'span'๊ณผ ๊ฐ์ DOM ์์์ ๊ฒฝ์ฐ ๋ฌธ์์ด, React ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ ํจ์/ํด๋์ค).key: ๋ฆฌ์คํธ ์ฌ์กฐ์ (list reconciliation)์ ์ฌ์ฉ๋๋ ๊ณ ์ ์๋ณ์.child: ์ฒซ ๋ฒ์งธ ์์ Fiber ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ.sibling: ๋ค์ ํ์ Fiber ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ.return: ๋ถ๋ชจ Fiber ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ (์ด Fiber๋ฅผ ๋ ๋๋งํ ๋ ธ๋).pendingProps: ์ ๋ฌ๋์์ง๋ง ์์ง ์ฒ๋ฆฌ๋์ง ์์ props.memoizedProps: ์ด Fiber๊ฐ ๋ง์ง๋ง์ผ๋ก ์๋ฃ๋์์ ๋์ props.stateNode: ์ปดํฌ๋ํธ์ ์ธ์คํด์ค (ํด๋์ค ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ) ๋๋ DOM ๋ ธ๋์ ๋ํ ์ฐธ์กฐ (ํธ์คํธ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ).updateQueue: ์ด Fiber์ ๋ํ ๋ณด๋ฅ ์ค์ธ ์ ๋ฐ์ดํธ ํ.effectTag: ์ํํ ๋ถ์ ํจ๊ณผ์ ์ ํ์ ๋ํ๋ด๋ ํ๋๊ทธ (์: ์ฝ์ , ์ญ์ , ์ ๋ฐ์ดํธ).nextEffect: ๋ถ์ ํจ๊ณผ ์ผ๊ด ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋, ํจ๊ณผ ๋ชฉ๋ก์ ๋ค์ Fiber ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ.
์ด๋ฌํ ์ํธ ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ๋ React๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์๋๋ก (์์์ ๋ ๋๋งํ๊ธฐ ์ํด) ํ์ํ๊ณ ์๋ก (์ํ ์ ๋ฐ์ดํธ ๋ฐ ์ปจํ ์คํธ ์ ํ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด) ํ์ํ ์ ์๋๋ก ํฉ๋๋ค.
React Fiber ํธ๋ฆฌ ๊ตฌ์กฐ: ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ ๊ทผ ๋ฐฉ์
Fiber ํธ๋ฆฌ๋ DOM ํธ๋ฆฌ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ํต์ ์ธ ๋ถ๋ชจ-์์ ํธ๋ฆฌ๊ฐ ์๋๋๋ค. ๋์ , ํ์ ๋ ธ๋์ ๋ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ตฌ์กฐ์ ์์ ํฌ์ธํฐ๋ฅผ ํ์ฉํ์ฌ ๋ ์ ์ฐํ๊ณ ์ํ ๊ฐ๋ฅํ ๊ทธ๋ํ๋ฅผ ๋ง๋ญ๋๋ค. ์ด ๋์์ธ์ Fiber๊ฐ ์์ ์ ์ผ์ ์ค์งํ๊ณ , ๋ค์ ์์ํ๋ฉฐ, ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ ๋ฅ๋ ฅ์ ํต์ฌ์ ๋๋ค.
์ผ๋ฐ์ ์ธ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด์ธ์:
function App() {
return (
);
}
function Header(props) {
return {props.title}
;
}
function MainContent() {
return (
Welcome to the future of technology.
);
}
Fiber ํธ๋ฆฌ์์ ์ด ๊ตฌ์กฐ๋ ํฌ์ธํฐ๋ก ํํ๋ฉ๋๋ค:
App์ ๋ํ Fiber๋div์ ๋ํ Fiber๋ฅผ ๊ฐ๋ฆฌํค๋childํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋๋ค.divFiber๋Header์ ๋ํ Fiber๋ฅผ ๊ฐ๋ฆฌํค๋childํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋๋ค.HeaderFiber๋MainContent์ ๋ํ Fiber๋ฅผ ๊ฐ๋ฆฌํค๋siblingํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋๋ค.MainContentFiber๋section์ ๋ํ Fiber๋ฅผ ๊ฐ๋ฆฌํค๋childํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋๋ค.sectionFiber๋p์ ๋ํ Fiber๋ฅผ ๊ฐ๋ฆฌํค๋childํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋๋ค.- ์ด๋ฌํ ๋ ๋๋ง๋ ๊ฐ Fiber๋ ๋ํ ๋ถ๋ชจ Fiber๋ฅผ ๊ฐ๋ฆฌํค๋
returnํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋๋ค.
์ด ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ ๊ทผ ๋ฐฉ์(child, sibling, return)์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ React๊ฐ ์ฌ๊ท์ ์ด์ง ์์ ๋ฐฉ์์ผ๋ก ํธ๋ฆฌ๋ฅผ ์ํํ์ฌ ๊น์ ํธ์ถ ์คํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฒ ํฉ๋๋ค. React๊ฐ ์์
์ ์ํํ ๋, ๋ถ๋ชจ์์ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ด๋ํ๊ณ , ๊ทธ ์์์ ํ์ ๋ก ์ด๋ํ๋ ์์ด๋ฉฐ, ํ์ ๋ฆฌ์คํธ์ ๋์ ๋๋ฌํ๋ฉด return ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ๋ฅผ ์๋ก ์ด๋ํฉ๋๋ค.
React Fiber์ ์ํ ์ ๋ต
React Fiber๋ ์ฌ์กฐ์ (reconciliation) ํ๋ก์ธ์ค ์ค์ ๋ ๊ฐ์ง ์ฃผ์ ์ํ ์ ๋ต์ ์ฌ์ฉํฉ๋๋ค:
1. "์์ ๋ฃจํ" (ํํฅ ๋ฐ ์ํฅ ์ํ)
์ด๋ Fiber ์คํ์ ํต์ฌ์ ๋๋ค. React๋ ํ์ฌ ์์ ์ค์ธ Fiber ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ์ ์งํฉ๋๋ค. ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฆ ๋๋ค:
- ์์ ์์ (Begin Work): React๋ Fiber ํธ๋ฆฌ์ ๋ฃจํธ์์ ์์ํ์ฌ ์์๋ค์ ํตํด ์๋๋ก ์ด๋ํฉ๋๋ค. ๊ฐ Fiber ๋ ธ๋์ ๋ํด ํด๋น ์์ ์ ์ํํฉ๋๋ค (์: ์ปดํฌ๋ํธ์ ๋ ๋๋ง ๋ฉ์๋ ํธ์ถ, props ๋ฐ ์ํ ์ ๋ฐ์ดํธ ์ฒ๋ฆฌ).
- ์์
์๋ฃ (Complete Work): Fiber ๋
ธ๋์ ์์
์ด ์๋ฃ๋๋ฉด (์ฆ, ๋ชจ๋ ์์์ด ์ฒ๋ฆฌ๋๋ฉด), React๋
returnํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ๋ฅผ ์๋ก ์ด๋ํฉ๋๋ค. ์ด ์ํฅ ์ํ ๋์, ๋ถ์ ํจ๊ณผ (DOM ์ ๋ฐ์ดํธ, ๊ตฌ๋ ๋ฑ)๋ฅผ ๋์ ํ๊ณ ํ์ํ ์ ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. - ์ปค๋ฐ ๋จ๊ณ (Commit Phase): ์ ์ฒด ํธ๋ฆฌ๊ฐ ์ํ๋๊ณ ๋ชจ๋ ๋ถ์ ํจ๊ณผ๊ฐ ์๋ณ๋๋ฉด, React๋ ์ปค๋ฐ ๋จ๊ณ๋ก ๋ค์ด๊ฐ๋๋ค. ์ด ๋จ๊ณ์์๋ ๋์ ๋ ๋ชจ๋ DOM ๋ณํ์ด ๋จ์ผ ๋๊ธฐ์ ์์ ์ผ๋ก ์ค์ DOM์ ์ ์ฉ๋ฉ๋๋ค. ์ด ์์ ์์ ์ฌ์ฉ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด๊ฒ ๋ฉ๋๋ค.
์์ ์ ์ผ์ ์ค์งํ๊ณ ์ฌ๊ฐํ๋ ๋ฅ๋ ฅ์ ํต์ฌ์ ๋๋ค. ์ค๋จ ๊ฐ๋ฅํ ์์ (์: ์ฐ์ ์์๊ฐ ๋ ๋์ ์ ๋ฐ์ดํธ)์ด ๋ฐ์ํ๋ฉด, React๋ ํ์ฌ Fiber ๋ ธ๋์ ์งํ ์ํฉ์ ์ ์ฅํ๊ณ ์ ์์ ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค. ์ฐ์ ์์๊ฐ ๋์ ์์ ์ด ์๋ฃ๋๋ฉด, ์ค๋จ๋์๋ ์์ ์ ์ค๋จ ์ง์ ๋ถํฐ ๋ค์ ์์ํ ์ ์์ต๋๋ค.
2. "ํจ๊ณผ ๋ชฉ๋ก" (๋ถ์ ํจ๊ณผ ์ํ)
์ํฅ ์ํ (์์
์๋ฃ) ๋์, React๋ ์ํํด์ผ ํ ๋ถ์ ํจ๊ณผ๋ฅผ ์๋ณํฉ๋๋ค. ์ด๋ฌํ ํจ๊ณผ๋ ์ผ๋ฐ์ ์ผ๋ก componentDidMount, componentDidUpdate์ ๊ฐ์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋ ๋๋ useEffect์ ๊ฐ์ ํ
๊ณผ ๊ด๋ จ๋ฉ๋๋ค.
Fiber๋ ์ด๋ฌํ ํจ๊ณผ๋ค์ ํจ๊ณผ ๋ชฉ๋ก(effect list)์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ฌ๊ตฌ์ฑํฉ๋๋ค. ์ด ๋ชฉ๋ก์ ํํฅ ๋ฐ ์ํฅ ์ํ ๋จ๊ณ์์ ๊ตฌ์ถ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด React๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ค์ ํ์ธํ๋ ๋์ , ๋ณด๋ฅ ์ค์ธ ๋ถ์ ํจ๊ณผ๊ฐ ์๋ ๋ ธ๋๋ง ํจ์จ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
ํจ๊ณผ ๋ชฉ๋ก์ ์ํ๋ ์ฃผ๋ก ํํฅ์์ ๋๋ค. ์ฃผ ์์ ๋ฃจํ๊ฐ ์ํฅ ํจ์ค๋ฅผ ์๋ฃํ๊ณ ๋ชจ๋ ํจ๊ณผ๋ฅผ ์๋ณํ๋ฉด, React๋ ์ด ๋ณ๋์ ํจ๊ณผ ๋ชฉ๋ก์ ์ํํ์ฌ ์ค์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ํํฉ๋๋ค (์: DOM ๋ ธ๋ ๋ง์ดํธ, ์ ๋ฆฌ ํจ์ ์คํ). ์ด ๋ถ๋ฆฌ๋ฅผ ํตํด ๋ถ์ ํจ๊ณผ๊ฐ ์์ธก ๊ฐ๋ฅํ๊ณ ์ผ๊ด ์ฒ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ค์ ์ ํจ์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
Fiber์ ํธ๋ฆฌ ์ํ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋จ์ํ ํ๋ฌธ์ ์ธ ์ฐ์ต์ด ์๋๋๋ค. ์ด๋ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ๊น์ ์ค์ง์ ์ธ ์ํฅ์ ๋ฏธ ๋ฏธ์นฉ๋๋ค:
- ์ฑ๋ฅ ์ต์ ํ: React๊ฐ ์์
์ ์ด๋ป๊ฒ ์ฐ์ ์์ํํ๊ณ ์ค์ผ์ค๋งํ๋์ง ์ดํดํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋ ๋์ ์ฑ๋ฅ์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,
React.memo๋๋useMemo๋ฅผ ์ฌ์ฉํ๋ฉด props๊ฐ ๋ณ๊ฒฝ๋์ง ์์ Fiber ๋ ธ๋์ ๋ํ ์์ ์ ๊ฑด๋๋ฐ์ด ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด๋ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด๊ณผ ์ฅ์น ๊ธฐ๋ฅ์ ๊ฐ์ง ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. - ๋ณต์กํ UI ๋๋ฒ๊น : ๋ธ๋ผ์ฐ์ ์ React ๊ฐ๋ฐ์ ๋๊ตฌ์ ๊ฐ์ ๋๊ตฌ๋ Fiber์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ์๊ฐํํ๊ณ props, ์ํ ๋ฐ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํฉ๋๋ค. Fiber๊ฐ ํธ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ํํ๋์ง ์๋ฉด ์ด๋ฌํ ๋๊ตฌ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ํด์ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํฌ๋ํธ๊ฐ ์์์น ๋ชปํ๊ฒ ์ฌ๋ ๋๋ง๋๋ ๊ฒฝ์ฐ, ๋ถ๋ชจ์์ ์์ ๋ฐ ํ์ ๋ก์ ํ๋ฆ์ ์ดํดํ๋ฉด ์์ธ์ ์ ํํ ์ฐพ์๋ผ ์ ์์ต๋๋ค.
- ๋์์ฑ ๊ธฐ๋ฅ ํ์ฉ:
startTransition๋ฐuseDeferredValue์ ๊ฐ์ ๊ธฐ๋ฅ์ Fiber์ ์ค๋จ ๊ฐ๋ฅํ ํน์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ฉ๋๋ค. ๊ธฐ๋ณธ ํธ๋ฆฌ ์ํ๋ฅผ ์ดํดํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋๊ท๋ชจ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋๋ ๋ณต์กํ ๊ณ์ฐ ์ค์๋ UI๋ฅผ ๋ฐ์์ฑ ์๊ฒ ์ ์งํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์๊ฐ๋์ ๊ธ์ต ๋ถ์๊ฐ๊ฐ ์ฌ์ฉํ๋ ์ค์๊ฐ ๋์๋ณด๋๋ฅผ ์์ํด ๋ณด์ธ์. ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ์ ์ ์งํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. - ์ฌ์ฉ์ ์ ์ ํ ๋ฐ ๊ณ ์ฐจ ์ปดํฌ๋ํธ(HOC): ์ฌ์ฉ์ ์ ์ ํ ๋๋ HOC๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ก์ง์ ๊ตฌ์ถํ ๋, ์ด๋ค์ด Fiber ํธ๋ฆฌ์ ์ด๋ป๊ฒ ์ํธ ์์ฉํ๊ณ ์ํ์ ์ํฅ์ ๋ฏธ์น๋์ง ํ์คํ ์ดํดํ๋ฉด ๋ ๊น๋ํ๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, API ์์ฒญ์ ๊ด๋ฆฌํ๋ ์ฌ์ฉ์ ์ ์ ํ ์ ๊ด๋ จ Fiber ๋ ธ๋๊ฐ ์ธ์ ์ฒ๋ฆฌ๋๊ฑฐ๋ ๋ง์ดํธ ํด์ ๋๋์ง ์ธ์งํด์ผ ํ ์ ์์ต๋๋ค.
- ์ํ ๊ด๋ฆฌ ๋ฐ Context API: Fiber์ ์ํ ๋ก์ง์ ์ปจํ ์คํธ ์ ๋ฐ์ดํธ๊ฐ ํธ๋ฆฌ๋ฅผ ํตํด ์ ํ๋๋ ๋ฐฉ์์ ํ์์ ์ ๋๋ค. ์ปจํ ์คํธ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด React๋ ํธ๋ฆฌ๋ฅผ ์๋๋ก ์ํํ์ฌ ํด๋น ์ปจํ ์คํธ๋ฅผ ์๋นํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์ ์ฌ๋ ๋๋งํฉ๋๋ค. ์ด๋ฅผ ์ดํดํ๋ฉด ๊ตญ์ ์ ์์๊ฑฐ๋ ํ๋ซํผ๊ณผ ๊ฐ์ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ญ ์ํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํํ ํจ์ ๊ณผ ํผํ๋ ๋ฐฉ๋ฒ
Fiber๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ทธ ๋ฉ์ปค๋์ฆ์ ์๋ชป ์ดํดํ๋ฉด ํํ ํจ์ ์ ๋น ์ง ์ ์์ต๋๋ค:
- ๋ถํ์ํ ์ฌ๋ ๋๋ง: ํํ ๋ฐ์ํ๋ ๋ฌธ์ ๋ ์ปดํฌ๋ํธ์ props๋ ์ํ๊ฐ ์๋ฏธ ์๋ ๋ฐฉ์์ผ๋ก ์ค์ ๋ก ๋ณ๊ฒฝ๋์ง ์์๋๋ฐ๋ ์ฌ๋ ๋๋ง๋๋ ๊ฒ์
๋๋ค. ์ด๋ ์ข
์ข
์๋ก์ด ๊ฐ์ฒด ๋๋ ๋ฐฐ์ด ๋ฆฌํฐ๋ด์ props๋ก ์ง์ ์ ๋ฌํ๋ ๋ฐ์ ๋ฐ์ํ๋ฉฐ, Fiber๋ ๋ด์ฉ์ด ๋์ผํ๋๋ผ๋ ์ด๋ฅผ ๋ณ๊ฒฝ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ํด๊ฒฐ์ฑ
์ผ๋ก๋ ๋ฉ๋ชจ์ด์ ์ด์
(
React.memo,useMemo,useCallback) ๋๋ ์ฐธ์กฐ ๋์ผ์ฑ ๋ณด์ฅ์ด ์์ต๋๋ค. - ๋ถ์ ํจ๊ณผ์ ๊ณผ๋ํ ์ฌ์ฉ: ๋ถ์ ํจ๊ณผ๋ฅผ ์๋ชป๋ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์ ๋ฐฐ์นํ๊ฑฐ๋
useEffect์์ ์ข ์์ฑ์ ๋ถ์ ์ ํ๊ฒ ๊ด๋ฆฌํ๋ฉด ๋ฒ๊ทธ๋ ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. Fiber์ ํจ๊ณผ ๋ชฉ๋ก ์ํ๋ ์ด๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋์ง๋ง, ์๋ชป๋ ๊ตฌํ์ ์ฌ์ ํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. ํญ์ ํจ๊ณผ ์ข ์์ฑ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ์ญ์์ค. - ๋ฆฌ์คํธ์์ ํค ๋ฌด์: Fiber์ ํจ๊ป ์๋ก ์๊ธด ๊ฒ์ ์๋์ง๋ง, ๋ฆฌ์คํธ ํญ๋ชฉ์ ์์ ์ ์ด๊ณ ๊ณ ์ ํ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ค์์ฑ์ ๋์ฑ ์ปค์ก์ต๋๋ค. ํค๋ React๊ฐ ๋ ๋๋ง ๊ฐ์ ํญ๋ชฉ์ ์ผ์น์์ผ ๋ฆฌ์คํธ์ ํญ๋ชฉ์ ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธ, ์ฝ์ ๋ฐ ์ญ์ ํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ํค๊ฐ ์์ผ๋ฉด React๋ ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ๋ถํ์ํ๊ฒ ์ฌ๋ ๋๋งํ์ฌ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฉฐ, ์ฝํ ์ธ ํผ๋ ๋๋ ์ ํ ์นดํ๋ก๊ทธ์ ๊ฐ์ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํํ ๋ฐ๊ฒฌ๋๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์ ๊ฒฝ์ฐ ํนํ ๊ทธ๋ ์ต๋๋ค.
- ๋์์ฑ ๋ชจ๋(Concurrent Mode) ํจ์ ์คํด: ์๋ฐํ ํธ๋ฆฌ ์ํ๋ ์๋์ง๋ง,
useTransition๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ Fiber์ ์ค๋จ ๋ฐ ์ฐ์ ์์ ์ง์ ๋ฅ๋ ฅ์ ์์กดํฉ๋๋ค. ๊ฐ๋ฐ์๋ Fiber๊ฐ ๋ ๋๋ง ๋ฐ ์ฐ์ ์์๋ฅผ ๊ด๋ฆฌํ๋ฉฐ ๋ฐ๋์ ์ฆ์ ์คํ๋๋ ๊ฒ์ด ์๋์ ์ดํดํ์ง ๋ชปํ๋ฉด ์ง์ฐ๋ ์์ ์ ๋ํด ์ฆ๊ฐ์ ์ธ ์ ๋ฐ์ดํธ๋ฅผ ์๋ชป ๊ฐ์ ํ ์ ์์ต๋๋ค.
๊ณ ๊ธ ๊ฐ๋ : Fiber ๋ด๋ถ ๋ฐ ๋๋ฒ๊น
๋ ๊น์ด ํ๊ณ ๋ค๊ณ ์ถ์ ์ฌ๋๋ค์ ์ํด ํน์ Fiber ๋ด๋ถ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ๋์์ด ๋ ์ ์์ต๋๋ค:
- The `workInProgress` Tree: React๋ ์ฌ์กฐ์ (reconciliation) ํ๋ก์ธ์ค ์ค์
workInProgressํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฆฌ๋ ์๋ก์ด Fiber ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ์ด ํธ๋ฆฌ๋ ์ ์ง์ ์ผ๋ก ๊ตฌ์ถ๋๊ณ ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ์ค์ Fiber ๋ ธ๋๋ ์ด ๋จ๊ณ์์ ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ฌ์กฐ์ ์ด ์๋ฃ๋๋ฉด ํ์ฌ ํธ๋ฆฌ์ ํฌ์ธํฐ๊ฐ ์workInProgressํธ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ ๋ฐ์ดํธ๋์ด, ์ด ํธ๋ฆฌ๊ฐ ํ์ฌ ํธ๋ฆฌ๊ฐ ๋ฉ๋๋ค. - ์ฌ์กฐ์ ํ๋๊ทธ (`effectTag`): ๊ฐ Fiber ๋
ธ๋์ ์ด๋ฌํ ํ๊ทธ๋ ๋ฌด์์ ํด์ผ ํ๋์ง์ ๋ํ ์ค์ํ ์งํ์
๋๋ค.
Placement,Update,Deletion,ContentReset,Callback๋ฑ๊ณผ ๊ฐ์ ํ๊ทธ๋ ์ปค๋ฐ ๋จ๊ณ์ ํ์ํ ํน์ DOM ์์ ์ ๋ํด ์๋ ค์ค๋๋ค. - React DevTools๋ก ํ๋กํ์ผ๋ง: React DevTools ํ๋กํ์ผ๋ฌ๋ ๋งค์ฐ ์ ์ฉํ ๋๊ตฌ์ ๋๋ค. ์ด๋ ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ์์๋ ์๊ฐ์ ์๊ฐํํ๊ณ , ์ด๋ค ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง๋์๋์ง, ๊ทธ ์ด์ ๋ ๋ฌด์์ธ์ง ๊ฐ์กฐ ํ์ํฉ๋๋ค. ํ์ผ ๊ทธ๋ํ์ ์์ ์ฐจํธ๋ฅผ ๊ด์ฐฐํจ์ผ๋ก์จ Fiber๊ฐ ํธ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ํํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ์ด๋์ ์์ ์ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ช ํํ ์ด์ ์์ด ์์ฃผ ๋ ๋๋ง๋๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ณํ๋ ๊ฒ์ ์ข ์ข prop ๋ถ์์ ์ฑ ๋ฌธ์ ๋ก ์ด์ด์ง๋๋ค.
๊ฒฐ๋ก : ๊ธ๋ก๋ฒ ์ฑ๊ณต์ ์ํ React Fiber ๋ง์คํฐํ๊ธฐ
React Fiber๋ ๋ณต์กํ UI๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ React์ ๋ฅ๋ ฅ์ ์์ด ์ค์ํ ์ง์ ์ ๋ํ๋ ๋๋ค. ๊ฐ๋ณ Fiber ๋ ธ๋์ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ์ ์ ์ฐํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํํ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ทธ ๋ด๋ถ ๊ตฌ์กฐ๋ ์ค๋จ ๊ฐ๋ฅํ ๋ ๋๋ง, ์ฐ์ ์์ ์ง์ ๋ฐ ๋ถ์ ํจ๊ณผ ์ผ๊ด ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ Fiber์ ํธ๋ฆฌ ์ํ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋จ์ํ ๋ด๋ถ ์๋ ๋ฐฉ์์ ์ดํดํ๋ ๊ฒ์ ๋์ด, ๋ค์ํ ๊ธฐ์ ํ๊ฒฝ๊ณผ ์ง๋ฆฌ์ ์์น์ ๊ฑธ์ณ ์ฌ์ฉ์๋ค์ ๋ง์กฑ์ํค๋ ๋ ๋ฐ์์ ์ด๊ณ , ์ฑ๋ฅ์ด ์ฐ์ํ๋ฉฐ, ์ ์ง ๋ณด์ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
child, sibling, return ํฌ์ธํฐ, ์์
๋ฃจํ ๋ฐ ํจ๊ณผ ๋ชฉ๋ก์ ์ดํดํจ์ผ๋ก์จ ๋๋ฒ๊น
, ์ต์ ํ, ๊ทธ๋ฆฌ๊ณ React์ ๊ฐ์ฅ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ํ์ฉํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ํดํท์ ์ป๊ฒ ๋ฉ๋๋ค. ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ์ ๊ตํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ณ์ ๊ตฌ์ถํจ์ ๋ฐ๋ผ, React Fiber ์ํคํ
์ฒ์ ๋ํ ๊ฒฌ๊ณ ํ ์ดํด๋ ์์ฌํ ์ฌ์ง ์์ด ํต์ฌ์ ์ธ ์ฐจ๋ณํ ์์๊ฐ ๋์ด, ์ฌ์ฉ์๊ฐ ์ด๋์ ์๋ ๋๊น ์๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค ์ ์๋๋ก ์ง์ํ ๊ฒ์
๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ:
- ๋ฉ๋ชจ์ด์ ์ด์
(Memoization) ์ฐ์ ์์ ์ง์ : ํนํ ๋ณต์กํ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ํฌํจํ๋ ์์ฃผ prop ์
๋ฐ์ดํธ๋ฅผ ๋ฐ๋ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ, ์ฐธ์กฐ ๋ถ์ผ์น๋ก ์ธํ ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํ๊ธฐ ์ํด
React.memo๋ฐuseMemo/useCallback์ ๊ตฌํํ์ธ์. - ํค ๊ด๋ฆฌ์ ์ค์์ฑ: ์ปดํฌ๋ํธ ๋ชฉ๋ก์ ๋ ๋๋งํ ๋ ํญ์ ์์ ์ ์ด๊ณ ๊ณ ์ ํ ํค๋ฅผ ์ ๊ณตํ์ธ์. ์ด๋ ํจ์จ์ ์ธ Fiber ํธ๋ฆฌ ์ ๋ฐ์ดํธ์ ๊ธฐ๋ณธ์ ๋๋ค.
- ํจ๊ณผ ์ข
์์ฑ ์ดํด:
useEffect,useLayoutEffect๋ฐuseCallback์ ์ข ์์ฑ์ ์ธ์ฌํ๊ฒ ๊ด๋ฆฌํ์ฌ ๋ถ์ ํจ๊ณผ๊ฐ ํ์ํ ๋๋ง ์คํ๋๊ณ ์ ๋ฆฌ ๋ก์ง์ด ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๋๋ก ํ์ธ์. - ํ๋กํ์ผ๋ฌ ํ์ฉ: React DevTools ํ๋กํ์ผ๋ฌ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ์ธ์. ํ์ผ ๊ทธ๋ํ๋ฅผ ๋ถ์ํ์ฌ ์ฌ๋ ๋๋ง ํจํด๊ณผ props ๋ฐ ์ํ๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ ์ํ์ ๋ฏธ์น๋ ์ํฅ์ ์ดํดํ์ธ์.
- ๋์์ฑ ๊ธฐ๋ฅ ์ ์คํ๊ฒ ์์ฉ: ์ค์ํ์ง ์์ ์
๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํ ๋, ํนํ ์ง์ฐ ์๊ฐ์ด ๋ ๊ธธ ์ ์๋ ๊ตญ์ ์ฌ์ฉ์๋ฅผ ์ํด UI ๋ฐ์์ฑ์ ์ ์งํ๊ธฐ ์ํด
startTransition๋ฐuseDeferredValue๋ฅผ ํ์ํ์ธ์.
์ด๋ฌํ ์์น๋ค์ ๋ด๋ฉดํํจ์ผ๋ก์จ, ์ ์ธ๊ณ์ ์ผ๋ก ํ์ํ ์ฑ๋ฅ์ ๋ฐํํ๋ ์ธ๊ณ์ ์์ค์ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ๋ฅ๋ ฅ์ ๊ฐ์ถ๊ฒ ๋ ๊ฒ์ ๋๋ค.